home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 132_01 / fpass0.c < prev    next >
Text File  |  1985-08-19  |  6KB  |  278 lines

  1.     #ASM
  2. pass0:
  3.     ldx    4,s    ; x -> pgscan
  4.     ldy    6,s    ; y -> mscan
  5. ;pass0(mptr,pgptr,pscrn)
  6. ;int *mptr,*pgptr,*pscrn;
  7. ;{
  8. ;int *mscan,*pgscan;
  9. ;int    mflag,pgflag;
  10.     ;mscan=mptr;
  11.     ;pgscan =pgptr;
  12. pass00:
  13.     ldd    FLGOFF,y    ; Test for update required
  14.     bpl    pass05        ; If no update
  15.     bita    8,s        ; Test for update this page
  16.     beq    pass05        ; If not
  17.     eora    8,s        ; Turn off the bit
  18.     bita    #60H        ; Was this the last update ?
  19.     bne    pass01        ; If another page
  20.     anda    #7FH        ; Mask out the master update flag
  21. pass01:
  22.     std    FLGOFF,Y    ; Restore master page flags
  23.     ldd    OBJOFF,Y
  24.     cmpd    OBJOFF,x    ; test for new object
  25.     beq    pass02        ; if the same object
  26.         ldd    2,s    ; pscrn
  27.         ldu    4,s    ; pgptr = ptop
  28.         pshs    x,y
  29.         pshs    y    ; mscan
  30.         pshs    x    ; pgscan
  31.         pshs    d    ; pscrn
  32.         pshs    u    ; pgptr = ptop
  33.         bsr    new
  34.         leas    8,s
  35.         puls    x,y    
  36.         bra    pass05
  37. pass02:
  38.     ; test for moved object
  39.     ldd    XOFF,y
  40.     cmpd    XOFF,x
  41.     bne    pass04        ; moved
  42.     ldd    YOFF,y
  43.     cmpd    YOFF,x
  44.     bne    pass04        ; moved
  45. ; object is fixed to here
  46.         ldd    2,s    ; pscrn
  47.         ldu    4,s    ; pgptr
  48.         pshs    x,y
  49.         pshs    y    ; mscan
  50.         pshs    x    ; pgscan
  51.         pshs    d    ; pscrn
  52.         pshs    u    ; pgptr
  53.         lbsr    fixed
  54.         leas    8,s
  55.         puls    x,y
  56.         bra    pass05
  57. pass04:    ; object has moved to here
  58.     ldd    2,s
  59.     ldu    4,s        ; d = pscrn, u = pgptr top
  60.     pshs    x,y
  61.     pshs    y
  62.     pshs    x
  63.     pshs    d
  64.     pshs    u
  65.     lbsr    moved
  66.     leas    8,s
  67.     puls    x,y
  68. pass05:
  69.     ldy    FOROFF,y    ; advance mscan  pointer
  70.     beq    pass0x        ; if null, exit
  71.     ldx    FOROFF,x    ; pgscan advance
  72.     lbne    pass00        ; if not = null, continue
  73. pass0x:
  74.     rts            ; exit pass0
  75. ;new(mptr,pgptr,screen,ptop)
  76. ;int    *mptr,*pgptr,*screen,*ptop;
  77. ;{
  78. ;int    mflag,pgflag;
  79. new:
  80.     ldx    6,s    ; x -> pgptr
  81.     ldy    8,s    ; y -> mscan
  82.     ldd    FLGOFF,y
  83.     bitb    #1    ; test for blanked
  84.     bne    new2    ; object is currently off, change at will
  85.         ldd    FLGOFF,x    ; pgscan flag
  86.         bitb    #1
  87.         bne    new1        ; if pglist off, flag for write
  88.             ldd    4,s    ; screen
  89.             pshs    x,y
  90.             pshs    d    ; screen
  91.             ldd    #32
  92.             pshs    d    ; NBYTEs
  93.             ldd    XOFF,x
  94.             pshs    d
  95.             ldd    YOFF,x
  96.             pshs    d
  97.             ldd    OBJOFF,x
  98.             pshs    d
  99.             lbsr    eraseobj
  100.             leas    10,s
  101.             puls    x,y
  102.             ldd    FLGOFF,x
  103.             orb     #64        ; show erased
  104.             std    FLGOFF,x
  105. new1:
  106.         ldd    FLGOFF,x    ; Or in write request
  107.         orb    #32
  108.         std    FLGOFF,x
  109. new2:
  110.     ldd    OBJOFF,y
  111.     std    OBJOFF,x        ; new object pointer
  112.     rts                ; exit new
  113.     #ENDASM
  114. /*
  115.     fixed    sets the erases and sets for write those objects
  116.     which are both the same and have not moved relative to the
  117.     master list.
  118. */
  119.     #ASM
  120. ;fixed(mscan,pgscan,pscrn,pgptr)
  121. ;int    *mscan,*pgscan,*pscrn,*pgptr;
  122. ;{
  123. ;int    mflag,pgflag;
  124. fixmfg    RMB    2
  125. fixpgf    RMB    2    ; Temp for pgflag
  126. fixed:
  127. ;    mflag    = mscan[FLAGS];
  128.     ldx    8,s
  129.     ldy    6,s    ; Y -> pgscan , X -> mscan
  130.     ldd    FLGOFF,x    ; get mflag
  131.     std    fixmfg
  132.     ldd    FLGOFF,y    ; get pgflag
  133.     std    fixpgf
  134. ;    pgflag    = pgscan[FLAGS];
  135. ;    if((mflag&BLANKED)==0){ /* mlist object is on */
  136.     ldd    fixmfg
  137.     andb    #1        ; test for blanked
  138.     bne    fixed1        ; if object is blanked
  139. ;        if(pgflag&BLANKED) {
  140.         ldd    fixpgf
  141.         bitb    #1
  142.         beq    fixed2    ; if object is already on
  143. ;            pgflag=(pgflag&(~BLANKED))+WRITE;
  144.             orb    #32    ; Turn on write
  145.             andb    #0FEH    ; Turn off blanked
  146.             std    fixpgf
  147.             bra    fixed2
  148. ;        }
  149. ;    }
  150. ;        /* mlist is blanked, test pglist */
  151. ;    else     if((pgflag&BLANKED)==0) {
  152. fixed1:
  153.     ldd    fixpgf
  154.     bitb    #1        ; test for not blanked
  155.     bne    fixed2
  156. ;            pgflag=pgflag+BLANKED+ERASE;
  157.         orb    #(1 + 64)
  158.         std    fixpgf
  159. ;            eraseobj(pscrn,NBYTES,pgscan[X],pgscan[Y],pgscan[OBJPTR]);
  160.         ldd    4,s    ; d = pscrn
  161.         pshs    y    ; save pgscan incase it is blown
  162.         pshs    d
  163.         ldd    #32    ; Nbytes
  164.         pshs    d
  165.         ldd    XOFF,y
  166.         pshs    d
  167.         ldd    YOFF,y
  168.         pshs    d
  169.         ldd    OBJOFF,y
  170.         pshs    d
  171.         jsr    eraseobj
  172.         leas    10,s
  173.         puls    y
  174. ;        }
  175. ;    pgscan[FLAGS]=pgflag;
  176. fixed2:
  177.     ldd    fixpgf
  178.     std    FLGOFF,y
  179. ;}
  180.     rts
  181.     #ENDASM
  182. /*
  183.     moved     erases and flags for re-write those objects which
  184.     have moved relative to the master list.
  185. */
  186.     #ASM
  187. ;moved(mscan,pgscan,pscrn,pgptr)
  188. ;int    *mscan,*pgscan,*pscrn,*pgptr;
  189. ;{
  190. ;int    pgflag,mflag;
  191. movmfg    RMB    2
  192. movpfg    RMB    2    ; pgflag
  193. moved:
  194. ;    pgflag    =pgscan[FLAGS];
  195.     ldx    6,s    ; X -> pgscan
  196.     ldy    8,s    ; Y -> mscan
  197.     ldd    FLGOFF,x
  198.     std    movpfg
  199. ;    mflag    = mscan[FLAGS];
  200.     ldd    FLGOFF,y
  201.     std    movmfg
  202. ;    if((mflag&BLANKED) ==0) { /* object is on */
  203.     ldd    movmfg
  204.     bitb    #1
  205.     bne    moved2    ; branch if mlist object is off
  206. ;        if(pgflag&BLANKED) { /* list object off */
  207.         ldd    movpfg
  208.         bitb    #1
  209.         beq    moved1    ; if list object off
  210. ;            pgflag=(pgflag&(~BLANKED))+MOVER+WRITE;
  211.             orb    #(128 + 32)
  212.             andb    #0FEH
  213.             std    movpfg
  214.             bra    moved3
  215. ;        }
  216. ;        else {    pgflag=pgflag+MOVER+WRITE+ERASE;
  217. moved1:
  218.         ldd    movpfg
  219.         orb    #(128 + 64 +32)
  220.         std    movpfg
  221. ;            eraseobj(pscrn,NBYTES,pgscan[X],pgscan[Y],pgscan[OBJPTR]);
  222.             ldd    4,s    ; pscrn
  223.             pshs    x,y    ; save pgscan pointer
  224.             pshs    d    ; pscrn on stack
  225.             ldd    #32
  226.             pshs    d
  227.             ldd    XOFF,x
  228.             pshs    d
  229.             ldd    YOFF,x
  230.             pshs    d
  231.             ldd    OBJOFF,x
  232.             pshs    d
  233.             jsr    eraseobj
  234.             leas    10,s
  235.             puls    x,y
  236.             bra    moved3
  237. ;             }
  238. ;    }
  239. ;        /* mlist object is off */
  240. ;    else    if((pgflag&BLANKED)==0) { /* pglist is on */
  241. moved2:
  242.         ldd    movpfg
  243.         bitb    #1
  244.         bne    moved3
  245. ;            pgflag=pgflag+ERASE+BLANKED;
  246.             orb    #(64 + 1)
  247.             std    movpfg
  248. ;            eraseobj(pscrn,NBYTES,pgscan[X],pgscan[Y],pgscan[OBJPTR]);
  249.             ldd    4,s    ; d = pscrn
  250.             pshs    x,y    ; save pgscan pointer
  251.             pshs    d
  252.             ldd    #32
  253.             pshs    d
  254.             ldd    XOFF,x
  255.             pshs    d
  256.             ldd    YOFF,x
  257.             pshs    d
  258.             ldd    OBJOFF,x
  259.             pshs    d
  260.             jsr    eraseobj
  261.             leas    10,s
  262.             puls    x,y
  263.             bra    moved3
  264. ;        }
  265. moved3:
  266. ;    pgscan[X]=mscan[X];
  267.     ldd    XOFF,y
  268.     std    XOFF,x
  269. ;    pgscan[Y]=mscan[Y];
  270.     ldd    YOFF,y
  271.     std    YOFF,x
  272. ;    pgscan[FLAGS]=pgflag;
  273.     ldd    movpfg
  274.     std    FLGOFF,x
  275. ;}
  276.     rts
  277.     #ENDASM
  278. h*>A├h*:9╖┬ï*>V2K3├ï*>S├h*>V├h*⌡>Z├v*G!K3> ╛┬\p├ï*2K3±ß"9ß"9ß"9>29├\⌡»2╬(2╠(2═(>2╔(2╩(>á2